//
//  LRStatuesCell.swift
//  LRWeibo
//
//  Created by 雷路荣 on 15/12/20.
//  Copyright © 2015年 leilurong. All rights reserved.
//

import UIKit

// 全局都可以访问控件间距
let LRStatusCellMargin: CGFloat = 8
/**
 *  声明代理协议
 */
protocol LRStatuesCellDelegate: NSObjectProtocol {
    ///转发微博点击
    func retweetedStatusDidClick(statues: LRStatues)
}

class LRStatuesCell: UITableViewCell {
    // MARK: - 属性
    /// 代理属性 最后要加问号
    weak var delegate: LRStatuesCellDelegate?
    /// 配图宽度约束
    var pictureViewWidthConstraint: NSLayoutConstraint?
    /// 配图高度约束
    var pictureViewHeightConstraint: NSLayoutConstraint?
    /// 模型数据
    var statues: LRStatues? {
        didSet {
            // 当控制器给cell设置模型后,顶部视图显示数据也是依赖模型
            cellTopView.statues = statues
            // 设置微博的内容
            //contentLabel.text = statues?.text
            // 设置微博的内容,使用带表情图片的属性文本
            contentLabel.attributedText = statues?.attrText
            // 将模型设置给配图视图.
            cellPictrueView.statues = statues
            // 给底部视图模型数据赋值
            cellBottomView.statuses = statues
            // 调用配图视图的计算尺寸的方法
            let size = cellPictrueView.calculateViewSize()
            //print("配图LRCellPictureView的size: \(size)")
            // 修改配图的宽高
            pictureViewHeightConstraint?.constant = size.height
            pictureViewWidthConstraint?.constant = size.width
        }
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    //MARK - 重写系统方法
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        prepareUI()
    }
    //加载子控件
    func prepareUI(){
        //1 添加控件
        contentView.addSubview(cellTopView)
        contentView.addSubview(cellBottomView)
        contentView.addSubview(contentLabel)
        contentView.addSubview(cellPictrueView)
        //2 顶部视图
        cellTopView.ff_AlignInner(type: ff_AlignType.TopLeft, referView: contentView, size: CGSizeMake(UIScreen.mainScreen().bounds.width, 53))
        //3.1 设置正文位置
        contentLabel.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: cellTopView, size: nil, offset: CGPointMake(LRStatusCellMargin, LRStatusCellMargin))
        //3.2 设置正文宽度,高度不用设置 不要忘记了前面加contentView
        contentView.addConstraint(NSLayoutConstraint(item: contentLabel, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: -LRStatusCellMargin))
        //设置图片视图约束 宽高先随便给个值，但是不要是0
//        let constant = cellPictrueView.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: contentLabel, size: CGSizeMake(298, 298), offset: CGPointMake(0, LRStatusCellMargin))
        //获取宽高约束
//        pictureViewWidthConstraint = cellPictrueView.ff_Constraint(constant, attribute: NSLayoutAttribute.Width)
//        pictureViewHeightConstraint = cellPictrueView.ff_Constraint(constant, attribute: NSLayoutAttribute.Height)
        //4 设置底部视图
        cellBottomView.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: cellPictrueView, size: CGSizeMake(UIScreen.mainScreen().bounds.width, 44),offset: CGPointMake(-LRStatusCellMargin, LRStatusCellMargin))
        // 1.tableView cell 的高度想通过cell里面的内容来自适应,需要给contentView添加约束,让contentView的高度参照里面的内容来自动更改高度(需要添加顶部和底部约束)
        // 添加contentView底部约束,contentView底部和contentLabel底部重合，设置的预估高度才有效
        // TODO:有错误,约束冲突.当配图视图的高度跟着图片数量随机时,系统会报约束冲突.,只有去掉自己给contentView添加的底部约束
//        contentView.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: cellBottomView, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0))
    }
    /// MARK: - 计算行高 cell自己计算行高
    func rowHeight(statues: LRStatues) -> CGFloat {
        // 设置cell的status,cell会根据status里面的内容重新设置每个控件的内容
        self.statues = statues
        // 更新布局,系统会根据控件的内容和约束重新布局每个控件位置和大小
        layoutIfNeeded()
        // 获取底部视图的最大的Y值
        return CGRectGetMaxY(cellBottomView.frame)
    }
    //MARK - 懒加载
    ///顶部视图
    private lazy var cellTopView: LRCellTopView = LRCellTopView()
    ///正文 不要定义成textLabel
    lazy var contentLabel: UILabel = {
        let label = UILabel(fontSize: 14, textColor: UIColor.darkGrayColor())
        //设置折行文本宽度(换行的宽度)，不然cell之间会随机出现间距
        label.preferredMaxLayoutWidth = UIScreen.mainScreen().bounds.width-2*8
        label.numberOfLines = 0
        return label
    }()
    ///底部视图
    lazy var cellBottomView: LRCellBottomView = LRCellBottomView()
    ///图片视图
    lazy var cellPictrueView: LRCellPictureView = LRCellPictureView()
    
}














